Kunerth's algorithm

From HandWiki

Kunerth's algorithm is an algorithm for computing the modular square root of a given number.[1][2] The algorithm does not require the factorization of the modulus, and relies on modular operations that is often easy when the given number is prime.

Algorithm

To find y from a given value

B=y2modN,

it takes the following steps:

  1. find the modular square root of r±N(modB). This step is quite easy, irrespectively of how big N when B is a prime.
  2. solve a quadratic equation associated with the modular square root of w2=Az2+Bz+C. Most of Kunerth's examples in his original paper solve this equation by having C be a integer square and thus setting z to zero.
    Expand out the following equation to obtain the quadratic
    ((Bz+r)2±N)/B=w2.
    One can always make sure that the quadratic can be solved by adjusting the modulus N in the above equation. Thus
    ((Bz+r)2+(BF+N))/B=w2
    will ensure a quadratic of Az2+Dz+C+F.
    One can then adjust F to make sure that C+F is a square. For large moduli, such as 67mod67F+RSA260, can have their square roots computed quickly via this method.
    The parameters of the polynomial expansion are quite flexible, in that ((67z+r)2+XRSA260)/(67y) can be done, for instance. It is quite easy to choose X and Y such that (r2+XRSA260)/(67y) is a square. The modular square root of 67ymodRSA260 can be taken this way.
  3. Having solved the associated quadratic equation we now have the variables w and set v = r (if C in the quadratic is a natural square).
  4. Solve for variables α and β the following equation:
    α=w(v+wβ),
  5. Obtain a value for X via factorization of the following polynomial:
    α2x2+(2αβN)x+(β2(y2modN))
    obtaining an answer like
    (37+9x)(1+25x)
  6. Obtain the modular square root by the equation. Remember to set X such that the term above is zero. Thus X would be 37/9 or -1/25.
    yαX+β(modN).

Example

To obtain 41mod856, first obtain 85613(mod41).

Then expand the polynomial:

((41z+13)2+856)/41=w2

into

25+26z+41z2

Since, in this case the C term is a square, we take w=5 and compute v=13 (in general, v=41z+13).

Solve for α and β the following equation
α==w(v+wβ)
getting the solution α=15 and β=2. (There may be other pairs of solutions to this equation.)
Then factor the following polynomial:
α2x2+(2αβ856)x+(β241)
obtaining
(37+9x)(1+25x)
Then obtain the modular square root via
15(3791)+(2)345(mod856).
Verify that 345241(mod856).

In the case that 856mod41 has no answer, then r856(modb856+41) can be used instead.

See also

References

  1. Adolf Kunerth, "Sitzungsberichte. Academie Der Wissenschaften" vol 78(2), 1878, p 327-338 (for quadratic equation algorithm), pp. 338–346 (for modular quadratic algorithm), available at Ernest Mayr Library, Harvard University
  2. Leonard Eugene Dickson, "History of Numbers", vol 2, pp. 382–384.
  • Adolf Kunerth, "Sitzungsberichte. Academie Der Wissenschaften" vol 75 ,II, 1877, pp. 7-58
  • Adolf Kunerth, "Sitzungsberichte. Academie Der Wissenschaften" vol 82, II, 1880, pp. 342-375